import pandas as pd

def preprocess_events(df: pd.DataFrame) -> pd.DataFrame:
    """
    对 events 数据进行预处理：
    - 只保留需要的行为类型
    - 转换时间戳为标准日期
    - 去除缺失值
    - 添加日期字段
    - 保留必要列
    """

    print("📦 原始数据大小:", df.shape)

    # 1. 删除包含缺失值的行
    df = df.dropna().copy()  # 避免 SettingWithCopyWarning

    # 2. 转换 timestamp 为 datetime（支持 ms 和 datetime 类型）
    if pd.api.types.is_integer_dtype(df['timestamp']):
        df['timestamp'] = pd.to_datetime(df['timestamp'], unit='ms')
    else:
        df['timestamp'] = pd.to_datetime(df['timestamp'])

    # 3. 保留有用行为类型：浏览、加购物车、交易
    df = df[df['event'].isin(['view', 'addtocart', 'transaction'])].copy()

    # 4. 添加日期字段（不含时间）
    df['date'] = df['timestamp'].dt.date

    # 5. 只保留必要列
    df = df[['timestamp', 'date', 'visitorid', 'event', 'itemid']]

    print("✅ 预处理后数据大小:", df.shape)
    print("🗓️ 时间范围:", df['timestamp'].min(), " ~ ", df['timestamp'].max())
    return df
